#!/bin/bash

# --- 一个用于计算项目中代码行数的脚本 ---
# 它能分别处理 .py 和 .ipynb 文件，并忽略非代码文件/目录。

# 检查 jq 是否安装，因为处理 .ipynb 文件需要它
if ! command -v jq &> /dev/null
then
    echo "错误: 需要 'jq' 命令来解析 .ipynb 文件。"
    echo "请先安装它 (例如: 'sudo apt-get install jq' 或 'brew install jq')。"
    exit 1
fi

echo "正在计算项目中的代码行数..."
echo "==================================="

# --- 1. 计算 Python (.py) 文件 ---
# - 查找所有以 .py 结尾的文件
# - 排除常见的非项目代码目录
# - 将所有文件内容通过管道传给 wc -l 进行一次性计数
py_lines=$(find . -name "*.py" \
    -not -path "./.venv/*" \
    -not -path "./__pycache__/*" \
    -not -path "./.git/*" \
    -exec cat {} + | wc -l)

# 对结果进行处理，防止没有文件时出错
py_lines=${py_lines:-0}

printf "Python脚本 (.py):    %'d 行\n" $py_lines

# --- 2. 计算 Jupyter Notebook (.ipynb) 文件 ---
ipynb_lines=0
# 查找所有 .ipynb 文件
find . -name "*.ipynb" -print0 | while IFS= read -r -d '' notebook; do
    # 使用 jq 提取所有 "code" 类型的单元格，并将源码行拼接起来
    # 然后用 wc -l 统计行数
    lines_in_notebook=$(jq -r '.cells[] | select(.cell_type == "code") | .source[]' "$notebook" | wc -l)
    ipynb_lines=$((ipynb_lines + lines_in_notebook))
done

printf "Jupyter Notebook (.ipynb): %'d 行\n" $ipynb_lines

# --- 3. 计算总行数并输出 ---
total_lines=$((py_lines + ipynb_lines))

echo "==================================="
printf "🎉 项目总代码行数: %'d 行\n" $total_lines

